/*
 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package java.lang.annotation;

/**
 * 指示注解类型适用的上下文。注解类型可能适用的声明上下文和类型上下文
 * 在JLS 9.6.4.1中指定，并在源代码中由{@link ElementType java.lang.annotation.ElementType}
 * 的枚举常量表示。
 *
 * <p>如果注解类型{@code T}上没有{@code @Target}元注解，
 * 则类型{@code T}的注解可以作为除类型参数声明之外的任何声明的修饰符编写。
 *
 * <p>如果存在{@code @Target}元注解，编译器将根据JLS 9.7.4
 * 强制执行{@code ElementType}枚举常量指示的使用限制。
 *
 * <p>例如，此{@code @Target}元注解指示声明的类型本身是元注解类型。
 * 它只能用于注解类型声明：
 * <pre>
 *    &#064;Target(ElementType.ANNOTATION_TYPE)
 *    public &#064;interface MetaAnnotationType {
 *        ...
 *    }
 * </pre>
 *
 * <p>此{@code @Target}元注解指示声明的类型仅用作复杂注解类型声明中的成员类型。
 * 它不能用于直接注解任何内容：
 * <pre>
 *    &#064;Target({})
 *    public &#064;interface MemberType {
 *        ...
 *    }
 * </pre>
 *
 * <p>单个{@code ElementType}常量在{@code @Target}注解中出现多次是编译时错误。
 * 例如，以下{@code @Target}元注解是非法的：
 * <pre>
 *    &#064;Target({ElementType.FIELD, ElementType.METHOD, ElementType.FIELD})
 *    public &#064;interface Bogus {
 *        ...
 *    }
 * </pre>
 *
 * @since 1.5
 * @jls 9.6.4.1 @Target
 * @jls 9.7.4 Where Annotations May Appear
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    /**
     * 返回注解类型可以应用到的元素种类的数组。
     * @return 注解类型可以应用到的元素种类的数组
     */
    ElementType[] value();
}
